package tools

import (
	"context"
	"fmt"
	"gitee.com/igolang/imoney/internal/core/logger"
	"github.com/pkg/errors"
	"log/slog"
)

// ErrorHandler 错误处理
// 记录日志并输出堆栈信息
func ErrorHandler(ctx context.Context, format string, args ...any) func(err interface{}) {
	return func(err interface{}) {
		logger.Log().LogAttrs(
			ctx,
			slog.LevelError,
			fmt.Sprintf(format, args...),
			slog.String("error", fmt.Sprintf("%+v", errors.Errorf("%+v", err))),
		)

		log.Printf("%+v\n", errors.Errorf("%+v", err))
	}
}

// RecoverHandler recover处理，配合defer使用.
// defer RecoverHandler(context.Background(), "panic了")
func RecoverHandler(ctx context.Context, format string, args ...any) {
	if err := recover(); err != nil {
		ErrorHandler(ctx, format, args...)(err)
	}
}
